#pragma once

class Camera
{
private:
	glm::vec3 target;
	glm::vec3 m_up;
	glm::vec3 pos;

public:
	Camera(glm::vec3 pos, glm::vec3 target, glm::vec3 up);
	Camera() = default;

	glm::mat4 getView();

	void forward(float dis);
	void backward(float dis);
	void right(float dis);
	void left(float dis);
	void up(float dis);
	void down(float dis);
	void pitch(float angle);
	void yaw(float angle);
	void roll(float angle);

	const glm::vec3 & getPos() { return pos; }
	const glm::vec3 & getUp() { return m_up; }
	const glm::vec3 & getTarget() { return target; }
	const glm::vec3 & getRight() { return glm::cross(target, m_up); }
};